package guiTegoNieBedzie;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;

import entities.KontrFirma;
import entities.Norma;
import entities.Probka;
import entities.TypBadan;
import entities.TypProbki;

public class ProbkaDAO extends DAO implements ProbkaDaoInter
{	
	public ProbkaDAO()
	{

	}

	public boolean dodajProbke(Probka p) 
	{
		String sql = null;
		if( p.getKontrahent().getClass() == KontrFirma.class )
		{
			sql = "INSERT INTO Probki " +
			"(uwagi,dataRejestracji,typProbkiID,kontrahentID,pacjentID,idObcy) " +
			"VALUES( '"+ p.getUwagi() +"',GETDATE(),"+ p.getTypProbki().getId() +", "+ p.getKontrahent().getKontrahentID() +", "+ p.getPacjent().getId()+", '"+ p.getIdZewn() +"' )";
		}
		else
		{
			sql = "INSERT INTO Probki " +
			"(uwagi,dataRejestracji,typProbkiID,kontrahentFizycznyID,pacjentID,idObcy) " +
			"VALUES( '"+ p.getUwagi() +"',GETDATE(),"+ p.getTypProbki().getId() +", "+ p.getKontrahent().getKontrahentID() +", "+ p.getPacjent().getId()+", '"+ p.getIdZewn() +"' )";
		}
		try 
		{
			this.db.dbSqlUpdate(sql);
			this.db.dbCommit();
			return true;
		}
		catch (SQLException e) 
		{
			e.printStackTrace();
			return false;
		}				
	}

	public int ostatnieIdProbki() {

		int ostatnieId = -1;

		try 
		{
			String sql ="SELECT IDENT_CURRENT('Probki') as \"id\"";
			ResultSet wynik = this.db.dbSqlQuery( sql);
			while( wynik.next() )
			{
				ostatnieId = wynik.getInt("id");

			}
			return ostatnieId;
		} 
		catch(SQLException e) 
		{
			e.printStackTrace();
			return ostatnieId;
		}

	}

	public LinkedList<TypBadan> getListaBadanDlaTypu(TypProbki t) 
	{
		LinkedList<TypBadan> listaBadan = new LinkedList<TypBadan>();
		try 
		{
			String sql = "SELECT typBadaniaID, normaID, typProbkiID, nazwa, cena FROM Typy_badan WHERE typProbkiID = '"+t.getId()+"'";
			ResultSet wynik = this.db.dbSqlQuery( sql);
			while( wynik.next() )
			{
			}
			return listaBadan;
		} 
		catch(SQLException e) 
		{
			e.printStackTrace();
		}
		catch(NullPointerException e)
		{
			System.out.println( "Pusta lista badan" );
		}
		return listaBadan;
	}

	public LinkedList<Probka> getListaProbek() 
	{

		LinkedList<Probka> listaProbek = new LinkedList<Probka>();
		try 
		{
			String sql = "SELECT probkaID, typPbobki, kontrahentID, pacjentID, uwagi, datRejestracji FROM Probka";
			ResultSet wynik = this.db.dbSqlQuery( sql );
			while( wynik.next() )
			{
				Probka probka = new Probka(wynik.getInt("probkaID"),wynik.getInt("typProbki"),wynik.getInt("kontrahentID"), wynik.getInt("pacjentID"),wynik.getString("uwagi"), wynik.getString("dataRejestracji" ));
				listaProbek.add( probka );
			}
			return listaProbek;
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
			return null;
		}
	}

	public LinkedList<TypProbki> getListaTypowProbek() 
	{
		LinkedList<TypProbki> listaTypow = new LinkedList<TypProbki>();
		try 
		{
			String sql = "SELECT typProbkiID, nazwa FROM Typy_probek";
			ResultSet wynik = this.db.dbSqlQuery( sql);
			while( wynik.next() )
			{
				TypProbki probki = new TypProbki(wynik.getInt("typProbkiID"), wynik.getString("nazwa"));
				listaTypow.add( probki );
			}
			return listaTypow;
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
			return null;
		}	
	}

	public boolean usunProbke(int id) 
	{	
		String sql = "DELETE FROM Probka WHERE probkaID = '" + id + "';";
		try 
		{
			this.db.dbSqlUpdate( sql );
			this.db.dbCommit();
			return true;
		}
		catch (SQLException e) 
		{
			e.printStackTrace();
			return false;
		}
	}
}
